package tp1.datos;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;

import tp1.presentacion.modelo.Localidad;
import tp1.presentacion.modelo.TipoVagon;
import tp1.presentacion.modelo.Tren;
import tp1.presentacion.modelo.Viaje;

public class ViajeDAO implements DAO {

	@Override
	public void agregar(Object ob) {
		Viaje vi = (Viaje)ob;
		Conexion con = new Conexion();
		String sql = "insert into boletos (cod_tren,cod_loc_or,cod_loc_des,dni_pasajero,tarj_pasajero,precio,fecha_emision,cod_tipo_vagon) " +
					 "values (?,?,?,?,?,?,?,?);";
		try {
			PreparedStatement pst = con.getConexion().prepareStatement(sql);
			pst.setInt(1, vi.getTren().getCodigo());
			pst.setInt(2, vi.getOrigen().getCodigo());
			pst.setInt(3, vi.getDestino().getCodigo());
			pst.setString(4, vi.getDni());
			pst.setString(5, vi.getTarjeta());
			pst.setFloat(6, vi.getPrecio());
			pst.setDate(7, new java.sql.Date(vi.getFechaEmision().getTime()));
			pst.setInt(8, vi.getVagon().getCodigo());
			pst.executeUpdate();
		} catch(SQLException sqlEx) {
			sqlEx.printStackTrace();
		} finally {
			try {
				con.getConexion().close();
			} catch (SQLException se) {
				se.printStackTrace();
			}
		}
	}

	@Override
	public ArrayList<Viaje> getTodos() {
		ArrayList<Viaje> boletos = new ArrayList<Viaje>();
		Conexion con = new Conexion();
		String sql = "select * from boletos;";
		try {
			Statement st = con.getConexion().createStatement();
			ResultSet rs = st.executeQuery(sql);
			LocalidadDAO locDAO = new LocalidadDAO();
			TipoVagonDAO tvDAO = new TipoVagonDAO();
			TrenDAO trDAO = new TrenDAO();
			while(rs.next()) {
				int id_bol = rs.getInt("id_boleto");
				int cod_tren = rs.getInt("cod_tren");
				int cod_loc_or = rs.getInt("cod_loc_or");
				int cod_loc_des = rs.getInt("cod_loc_des");
				String dni = rs.getString("dni_pasajero");
				String tarj = rs.getString("tarj_pasajero");
				float pr = rs.getFloat("precio");
				Date fec_em = rs.getDate("fecha_emision");
				int cod_tipo_vagon = rs.getInt("cod_tipo_vagon");
				
				Localidad origen = locDAO.getUno(cod_loc_or);
				Localidad destino = locDAO.getUno(cod_loc_des);
				Tren tren = trDAO.getUno(cod_tren);
				TipoVagon vagon = tvDAO.getUno(cod_tipo_vagon);
				
				Viaje bol = new Viaje(id_bol,dni,tarj,origen,destino,tren,vagon,pr);
				bol.setFechaEmision(fec_em);
				
				boletos.add(bol);
			}
		} catch(SQLException sqlEx) {
			sqlEx.printStackTrace();
		}
		return boletos;
	}

	@Override
	public Viaje getUno(int id) {
		// TODO Auto-generated method stub
		return null;
	}

}
